﻿#region using
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
#endregion

namespace Janksen.Mapping
{
    /// <summary>
    /// 加载数据类
    /// </summary>
    public class LoadData
    {
        #region 从一个DataRow中加载数据到一个实体对象中
        /// <summary>
        /// 从一个DataRow中加载数据到一个实体对象中
        /// </summary>
        /// <typeparam name="T">类型</typeparam>
        /// <param name="dr">DataRow</param>
        /// <returns></returns>
        public static T LoadForObject<T>(DataRow dr)
        {
            if (dr == null)
            {
                return default(T);
            }
            else
            {
                return (T)EntityExtendHelper.GetInstance<T>().SetFieldsValue(dr);
            }
        }
        #endregion

        #region 从一个DataTable加载数据到一个实体对象列表中
        /// <summary>
        /// 从一个DataTable加载数据到一个实体对象列表中
        /// </summary>
        /// <typeparam name="T">实体类型</typeparam>
        /// <param name="dt">DataTable</param>
        /// <returns></returns>
        public static List<T> LoadForObjectList<T>(DataTable dt)
        {
            //如果没有数据，返回长度为0的列表
            if (dt == null || dt.Rows.Count == 0)
            {
                return new List<T>(0);
            }

            EntityExtend.IEntityExtend entityExtendInstance = EntityExtendHelper.GetInstance<T>();
            List<T> lstResult = new List<T>();

            foreach (DataRow dr in dt.Rows)
            {
                lstResult.Add((T)entityExtendInstance.SetFieldsValue(dr));
            }

            return lstResult;
        }
        #endregion

        #region 从一个SqlDataReader加载数据到一个实体对象中
        /// <summary>
        /// 从一个SqlDataReader加载数据到一个实体对象中
        /// </summary>
        /// <typeparam name="T">实体类型</typeparam>
        /// <param name="dr">SqlDataReader</param>
        /// <returns></returns>
        public static T LoadForObject<T>(SqlDataReader dr)
        {
            if (dr.Read())
            {
                return (T)EntityExtendHelper.GetInstance<T>().SetFieldsValue(dr);
            }
            else
            {
                return default(T);
            }
        }
        #endregion

        #region 从一个SqlDataReader加载数据到一个实体对象列表中
        /// <summary>
        /// 从一个SqlDataReader加载数据到一个实体对象列表中
        /// </summary>
        /// <typeparam name="T">实体类型</typeparam>
        /// <param name="dr">SqlDataReader</param>
        /// <returns></returns>
        public static List<T> LoadForObjectList<T>(SqlDataReader dr)
        {
            if (dr == null || !dr.HasRows)
            {
                return new List<T>(0);
            }

            List<T> lstResult = new List<T>();
            EntityExtend.IEntityExtend entityExtendInstance = EntityExtendHelper.GetInstance<T>();
            while (dr.Read())
            {
                lstResult.Add((T)entityExtendInstance.SetFieldsValue(dr));
            }

            return lstResult;
        }
        #endregion

    }
}
